#define _CRT_SECURE_NO_WARNINGS 1

/*
2,3,5,7,11,13,.... 是素数序列。 类似：7,37,67,97,127,157 
这样完全由素数组成的等差数列，叫等差素数数列。

搜索：
长度为 10 的等差素数列，其公差最小值是多少？
*/

#include <stdio.h>
#include <stdlib.h>

//判断是否为素数
int IsPrime(int a)
{
    int n = 0;//除数
    for (n = 2; n < a; n++)//除数为2～99的数
    {
        if (a % n == 0)
            return 0;
        //参数若能被 1 和本身以外的数整除，则证明不是素数，返回0，否则返回1
    }
    return 1;
}

int main()
{
    int i, d, n, s = 0;
    int arr[10000] = { 0 };

    //将从 2 开始的素数从小到大依次存在数组 arr 中
    for (i = 2; i < 10000; i++)
    {
        if (IsPrime(i) == 1)
            arr[s++] = i;
    }

    //用枚举
    for (i = 0; i < s; i++)//搜索数组 arr
    {
        for (d = 3; d < 500; d++)//公差 d，从3开始搜索
        {
            for (n = 0; n < 10; n++)//即数列的项数
            {
                if (IsPrime(arr[i] + n * d) == 1)//即等差数列公式：数列首项 +（ n * 公差 ）。其中限制了 n 是 0-10 的，且都符合题目条件
                    continue;
                else
                    break;
            }
            if (n == 10)//即找到了符合要求的 最小的数列首项 和 最小的公差d，满足上面的等差数列公式
            {
                printf("%d\n", d);

                system("pause");
                return 0;
            }
        }
    }
}